// by zhangxinxu welcome to visit my personal website http://www.zhangxinxu.com
// 鼠标延迟执行方法
// 2010-06-30
// 2010-09-21 绑定当前对象
/**
	应用示例：
	$("#test").hoverDelay({
		hoverEvent: function(target){
			alert("经过我！");
		}
	});
	hoverDuring:鼠标悬念超时时间，
	outDuring:鼠标离开超时时间，
	clear:是否立即清除前一个菜单显示，默认为清除。
	
	@version 20110816 经过Zach的修，修改事件响应方式，
		将当前对象本身作为参数传递给处理函数。
		将out事件的处理方式设置为“立即”，hover事件中不再处理
		out超时时间句柄。
	@argument target 为当前事件触发的对象,如果取得不到可以用window.hoverObject来替代
*/
(function($){
    $.fn.hoverDelay = function(options){
        var defaults = {
            hoverDuring: 200,
            outDuring: 200,
            clear	:true,
            hoverEvent: function(target){
                $.noop();
            },
            outEvent: function(target){
                $.noop();    
            }
        };
        var sets = $.extend(defaults,options || {});
        var hoverTimer, outTimer, that = this;
        return $(this).each(function(){
            $(this).hover(function(){
            	//显示下一个菜单之前清除之前的显示
            	setTimeout(sets.outEvent, 0,this);
            	window.hoverObject=null;
            	window.hoverObject=this;
                //clearTimeout(outTimer);
                hoverTimer = setTimeout(function(){
               		sets.hoverEvent.call(this);
                }, sets.hoverDuring);
            },function(){
                clearTimeout(hoverTimer);
                outTimer = setTimeout(function(){
                	sets.outEvent.call(this);
                	}, sets.outDuring);
                }
            );    
        });
    }      
})(jQuery);